package com.xjh.basestudy.javabase.array;

public class array1 {
    public static void main(String[] args) {
        //动态初始化
        int[] arr1 = new int[5];
        System.out.println("arr1:" + arr1);
        //静态初始化
        int[] arr2 = new int[]{1, 2, 3};
        //简写
        int[] arr3 = {1, 2, 3};
        System.out.println("arr2:" + arr2);
        System.out.println("arr2:" + arr2[0]);
        System.out.println("arr2:" + arr2[1]);
        System.out.println("arr2:" + arr2[2]);

        // 在reset函数内给参数数组元素赋值，在main函数中数组arr的值也会变。
        int[] arr = {10, 20, 30, 40};
        reset(arr);
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    /*这个max函数接受一个最小值，以及可变长度的若干参数，返回其中的最大值。可变长度参数的语法是在数据类型后面加三个点“... ”，
    在函数内，可变长度参数可以看作是数组。可变长度参数必须是参数列表中的最后一个，一个函数也只能有一个可变长度的参数。*/
        /*可变长度参数实际上会转换为数组参数，也就是说，函数声明max(int min, int... a)实际上会转换为max(int min, int[] a)，
        在main函数调用max(0,2,4,5)的时候，实际上会转换为调用max(0, new int[]{2,4,5})，使用可变长度参数主要是简化了代码书写。*/
        System.out.println(max(0));
        System.out.println(max(0, 2));
        System.out.println(max(0, 2, 4));
        System.out.println(max(0, 2, 4, 5));
    }


    public static void reset(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            arr[i] = i;
        }
    }


    public static int max(int min, int... a) {
        int max = min;
        for (int i = 0; i < a.length; i++) {
            if (max < a[i]) {
                max = a[i];
            }
        }
        return max;
    }


}
